/**
 * 进行jssdk的校验
 * @param  {[type]} _callback [description]
 * @return {[type]}           [description]
 */
import axios from 'axios'
import config from '../config'
export let browser = {
    versions: function () {
        var u = navigator.userAgent, app = navigator.appVersion
        return {
            trident: u.indexOf('Trident') > -1, //IE内核
            presto: u.indexOf('Presto') > -1, //opera内核
            webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
            gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
            mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
            ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
            android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
            iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
            iPad: u.indexOf('iPad') > -1, //是否iPad
            webApp: u.indexOf('Safari') == -1, //是否web应该程序，没有头部与底部
            weixin: u.indexOf('MicroMessenger') > -1, //是否微信 （2015-01-22新增）
            qq: u.match(/\sQQ/i) //是否QQ
        }
    }(),
    language: (navigator.browserLanguage || navigator.language).toLowerCase()
}

//读取cookies
export let getCookie = function (name) {
    let arr, reg = new RegExp(`(^|)({"${name}"[^;]*)(;|$)`) //正则匹配
    arr = decodeURIComponent(document.cookie).match(reg)
    if (arr.length>0) {
        return JSON.parse(arr[0]).user
    }
    else {
        return null
    }
}

export let jssdk = function (wmpname, appname, islogin, title, desc, cb) {
    $.ajax({
        url: 'http://www.wit-orange.com/wechat_new/jssdk/yeke?url=' + encodeURIComponent(location.href),
        success: function (config) {
            wx.config({
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                appId: config.appid, // 必填，公众号的唯一标识
                timestamp: config.timestamp, // 必填，生成签名的时间戳
                nonceStr: config.nonceStr, // 必填，生成签名的随机串
                signature: config.signature, // 必填，签名，见附录1
                jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'addCard', 'chooseCard', 'openCard'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
            })
        },
        error: function (err) {
            console.log(err)
        }
    })
    //
    wx.ready(function () {
        cb.call(null, this)
        wx.onMenuShareTimeline({
            title: title, // 分享标题
            desc: desc, // 分享描述
            link: DS.linkChange(`http://www.wit-orange.com/wechat_new/login/${wmpname}/${appname}?isLogin=${islogin}`), // 分享链接
            imgUrl: `http://www.wit-orange.com/${wmpname}_${appname}/images/shareimg.jpg`, // 分享图标
            success: function () {
                let __url = `/wechat_new/promotion/update/yeke/zhuanpan?openid=${window.user.openid}&update_type=share`
                axios.get(__url)
                    .then(function (res) {
                        console.log(res.data)
                    })
                    .catch(function (err) {
                        console.log(err)
                    })
                // 用户确认分享后执行的回调函数
                DS.sendRepost('appMessage')
                history.go(0)
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
                history.go(0)
            }
        })
        wx.onMenuShareAppMessage({
            title: title, // 分享标题
            desc: desc, // 分享描述
            link: DS.linkChange(`http://www.wit-orange.com/wechat_new/login/${wmpname}/${appname}?isLogin=${islogin}`), // 分享链接
            imgUrl: `http://www.wit-orange.com/${wmpname}_${appname}/images/shareimg.jpg`, // 分享图标
            type: '', // 分享类型,music、video或link，不填默认为link
            dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
            success: function () {
                let __url = `/wechat_new/promotion/update/yeke/zhuanpan?openid=${window.user.openid}&update_type=share`
                axios.get(__url)
                    .then(function (res) {
                        console.log(res.data)
                    })
                    .catch(function (err) {
                        console.log(err)
                    })
                // 用户确认分享后执行的回调函数
                DS.sendRepost('timeline')
                history.go(0)
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
                history.go(0)
            }
        })

    })
}

export let shareapi = function (wmpname, appname, islogin, title, desc) {
    wx.onMenuShareTimeline({
        title: title, // 分享标题
        link: `http://www.wit-orange.com/wechat_new/login/${wmpname}/${appname}?isLogin=${islogin}`, // 分享链接
        imgUrl: `http://www.wit-orange.com/${wmpname}_${appname}/images/shareimg.jpg`, // 分享图标
        success: function () {
            // 用户确认分享后执行的回调函数
            history.go(0)
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
            history.go(0)
        }
    })
    wx.onMenuShareAppMessage({
        title: title, // 分享标题
        desc: desc, // 分享描述
        link: `http://www.wit-orange.com/wechat_new/login/${wmpname}/${appname}?isLogin=${islogin}`, // 分享链接
        imgUrl: `http://www.wit-orange.com/${wmpname}_${appname}/images/shareimg.jpg`, // 分享图标
        type: '', // 分享类型,music、video或link，不填默认为link
        dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    })
}

/**
 * 传入一个回调函数名,和参数，判断是否是函数，如果是，则回调
 * @param  {String} a 函数名
 * @param  {字符串,也可以是json字符串} b 回调函数的参数
 * @return {[type]}   [description]
 */
export let execCallBack = function (a, b) {
    let params = b || {}
    if (this.isfun(a)) {
        a.call(this, params)
    }
}
export let execCB = function (a, err, b) {
    let params = b || {}
    if (this.isfun(a)) {
        a.call(this, err, params)
    }
}
export let isfun = function (a) {
    if (typeof a === 'function') {
        return true
    }
}
export let guid = function () {
    function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    }

    return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4())
}
export let getVerifyCode = function () {
    return (((1 + Math.random()) * 0x10000) | 0).toString(8).substring(2)
}
export let extendObj = function () { //扩展对象
    let args = arguments //将传递过来的参数数组赋值给args变量
    if (args.length == 1) {
        return args[0]
    }
    if (typeof args[0] !== 'object' || typeof args[1] !== 'object') {
        return
    } else {
        Object.keys(args[1]).map(function (key) {
            args[0][key] = args[1][key]
        })
        return args[0]
    }
}
//实现一系列图片的预加载
//参数sources:图片信息关联数组
//参数callback:回调函数——图片预加载完成后立即执行此函数。
export let loadImages = function (sources, callback) {
    let count = 0,
        images = {},
        imgNum = 0
    for (let src in sources) {
        imgNum++
    }
    for (let src in sources) {
        images[src] = new Image()
        images[src].onload = function () {
            if (++count >= imgNum) {
                callback(images)
            }
        }
        images[src].src = sources[src]
    }
}
export let load = function (opts, cb) {
    let appname = config.wx.appname
    let wmpname = config.wx.wmpname
    let cw = $(window).width()
    let ch = $(window).height()
    let canvas = document.createElement('canvas')
    canvas.id = 'loadPage'
    canvas.style.display = 'block'
    canvas.width = cw
    canvas.height = ch
    $('body').append(canvas)
    let stage = new createjs.Stage(canvas)

    let manifest
    let preload
    let progressText = new createjs.Text('', '16px 微软雅黑', 'black')
    progressText.x = cw / 2 - 30
    progressText.y = ch / 2 - 20
    stage.addChild(progressText)
    stage.update()

    //处理资源
    // let baseUrl = `http://www.wit-orange.com/${wmpname}_${appname}/`
    let baseUrl = 'http://localhost:9888/'
    let srcs = opts.srcs
    manifest = srcs.map(function (src) {
        return baseUrl + src
    })

    //开始预加载
    function startPreload() {
        preload = new createjs.LoadQueue(true)
        //注意加载音频文件需要调用如下代码行
        preload.on('progress', handleFileProgress)
        preload.on('complete', loadComplete)
        preload.on('error', loadError)
        preload.loadManifest(manifest)

    }


    //处理加载错误：大家可以修改成错误的文件地址，可在控制台看到此方法调用
    function loadError(evt) {
        console.log('加载出错！', evt.text)
    }

    //已加载完毕进度
    function handleFileProgress(event) {
        progressText.text = '已加载 ' + (preload.progress * 100 | 0) + ' %'
        stage.update()
    }

    //全度资源加载完毕
    function loadComplete(event) {
        console.log('已加载完毕全部资源')
        cb.call(null, this)
    }

    startPreload()
}

if ($) {
    $.fn.createSelector = function (name, array) {
        let _this = this
        let options = null
        if (array instanceof Array) {
            options = array
        }
        if ($(_this).hasClass('select-picker')) {
            let option_default = $(`<div class=select-option-default data-value=${options[0]} data-name=${name}>${options[0]}</div>'`)
            $(_this).append(option_default)
            options.map(function (item) {
                let option = $('<div class="select-option" data-value="' + item + '">' + item + '</div>')
                $(_this).append(option)
            })
        } else {
            console.log('找不到含有.select-picker的元素')
        }
    }
}